package com.librelato.persistencia;

import java.util.Date;
import java.util.List;

import com.librelato.bean.CondicaoPagamentoBean;
import com.librelato.bean.FornecedorBean;
import com.librelato.bean.ProdutoBean;
import com.librelato.bean.SolicitacaoBean;
import com.librelato.bean.TabelaPrecoBean;
import com.librelato.persistencia.config.SQLConfiguracao;
import com.librelato.persistencia.enums.EnumCondicao;
import com.librelato.persistencia.interfaces.ITabelaPrecoDao;
import com.librelato.util.Ferramentas;

public class TabelaPrecoDao<P extends TabelaPrecoBean> extends DaoGenerico<P>
		implements ITabelaPrecoDao<P> {

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public P salvar(P p) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void excluir(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void editar(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void preSalvar(P p) {
		// TODO Auto-generated method stub

	}

	public TabelaPrecoBean buscaTabelaPreco(FornecedorBean fornecedor)
			throws Exception {

		TabelaPrecoBean tabelaPreco = null;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_tabela_preco_fornecedor");
			ps = conn.prepareStatement(query);
			ps.setString(1, fornecedor.getCodigo());
			rs = ps.executeQuery();
			if (rs.next()) {
				tabelaPreco = new TabelaPrecoBean();
				tabelaPreco
						.setCondicaoPagamento(new CondicaoPagamentoBean(rs
								.getString("AIA_CONDPG"), "", rs
								.getString("E4_DESCRI")));
				tabelaPreco.setDataVigenciaAte(Ferramentas.formataData(
						rs.getString("AIA_DATATE"), "yyyyMMdd"));
				tabelaPreco.setDataVigenciaDe(Ferramentas.formataData(
						rs.getString("AIA_DATDE"), "yyyyMMdd"));
				tabelaPreco.setDescricao(rs.getString("AIA_DESCRI"));
			}
		} catch (Exception e) {
			throw e;
		}
		return tabelaPreco;
	}

	public List<SolicitacaoBean> buscaPrecoItensTabela(
			FornecedorBean fornecedor, List<SolicitacaoBean> solicitacoes)
			throws Exception {

		try {
			conn = GerenciadorConexao.getConexao();
			for (SolicitacaoBean solicitacao : solicitacoes) {
				if (solicitacao.getItensSolicitacao().get(0).getCentroCusto() != null) {
					query = SQLConfiguracao.getInstance().getValor(
							"localiza_itens_tabela_preco");
					ps = conn.prepareStatement(query);
					ps.setString(1, fornecedor.getCodigo());
					ps.setString(2, solicitacao.getItensSolicitacao().get(0)
							.getCodigo());
					ps.setString(3, Ferramentas.formataData(
							new Date().getTime(), "yyyyMMdd"));
					rs = ps.executeQuery();
					if (rs.next()) {
						solicitacao.getItensSolicitacao().get(0)
								.setPreco(rs.getDouble("AIB_PRCCOM"));
						solicitacao
								.getItensSolicitacao()
								.get(0)
								.setVigencia(
										Ferramentas.formataData(
												rs.getString("AIB_DATVIG"),
												"yyyyMMdd"));
					}
				}
				solicitacao.getItensSolicitacao().get(0)
						.setIcms(fornecedor.getValorIcmsPadrao());
			}

		} catch (Exception e) {
			throw e;
		}
		return solicitacoes;
	}

	public ProdutoBean buscaPrecoItensTabela(FornecedorBean fornecedor,
			ProdutoBean produto) throws Exception {
		try {
			conn = GerenciadorConexao.getConexao();
			if (produto.getCentroCusto() != null) {
				query = SQLConfiguracao.getInstance().getValor(
						"localiza_itens_tabela_preco");
				ps = conn.prepareStatement(query);
				ps.setString(1, fornecedor.getCodigo());
				ps.setString(2, produto.getCodigo());
				ps.setString(3, Ferramentas.formataData(new Date().getTime(),
						"yyyyMMdd"));
				rs = ps.executeQuery();
				if (rs.next()) {
					produto.setPreco(rs.getDouble("AIB_PRCCOM"));
					produto.setVigencia(Ferramentas.formataData(
							rs.getString("AIB_DATVIG"), "yyyyMMdd"));
				}
			}
		} catch (Exception e) {
			throw e;
		}
		return produto;
	}
}
